/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import model.Categoria;
import utils.Conexao;
import utils.ExcecaoSCEV;

public class CategoriaDAO {

    private static CategoriaDAO categoriaDAO;

    public static CategoriaDAO getInstance() {
        if (categoriaDAO == null) {
            categoriaDAO = new CategoriaDAO();
        }
        return categoriaDAO;
    }

    public List<Categoria> pegarTodos() throws ExcecaoSCEV {
        List<Categoria> Categorias = new ArrayList<Categoria>();


        try {

            Connection db = Conexao.getConnection();
            Statement st = (Statement) db.createStatement();
            ResultSet rs = st.executeQuery(
                    "SELECT cod_categoria,nomeCategoria FROM categoria");
            while (rs.next()) {
                Categoria categoria = new Categoria();
                categoria.setCodigoCategoria(rs.getInt(1));
                categoria.setNomeCategoria(rs.getString(2));
                Categorias.add(categoria);
            }
            rs.close();


        } catch (SQLException ex) {
            throw new ExcecaoSCEV("Erro ao listar os Categoria. Código "
                    + ex.getSQLState()
                    + "\nDescricao "
                    + ex.getMessage());
        }
        return Categorias;
    }

    public Categoria pegarUm(Integer codCategoria) throws ExcecaoSCEV {


        try {

            Connection db = Conexao.getConnection();
            Statement st = (Statement) db.createStatement();
            ResultSet rs = st.executeQuery(
                    "SELECT cod_categoria,nomeCategoria FROM categoria where cod_categoria =" + codCategoria);

            Categoria categoria = new Categoria();
            categoria.setCodigoCategoria(rs.getInt(1));
            categoria.setNomeCategoria(rs.getString(2));
            return categoria;
            
        } catch (SQLException ex) {
            throw new ExcecaoSCEV("Erro ao listar os Categoria. Código "
                    + ex.getSQLState()
                    + "\nDescricao "
                    + ex.getMessage());
        }
        
    }

    public void incluir(Categoria Categoria) throws ExcecaoSCEV {
        try {
            Connection db = Conexao.getConnection();
            PreparedStatement st =
                    db.prepareStatement("insert into categoria ("
                    + "nomeCategoria) values (?)");

            st.setString(1, Categoria.getNomeCategoria());
            st.executeUpdate();
            st.close();

        } catch (SQLException ex) {
            throw new ExcecaoSCEV("Erro na alteração da Categoria.  Código "
                    + ex.getSQLState()
                    + "\nDescricao "
                    + ex.getMessage());
        }
    }

    public void alterar(Categoria Categoria) throws ExcecaoSCEV {
        try {
            Connection db = Conexao.getConnection();
            PreparedStatement st =
                    db.prepareStatement(
                    "update categoria set nomeCategoria=? where cod_categoria=?");

            st.setString(1, Categoria.getNomeCategoria());
            st.setInt(2, Categoria.getCodigoCategoria());
            st.executeUpdate();
            st.close();

        } catch (SQLException ex) {
            throw new ExcecaoSCEV("Erro na alteração da Categoria.  Código "
                    + ex.getSQLState()
                    + "\nDescricao "
                    + ex.getMessage());
        }
    }

    public void excluir(Categoria Categoria) throws ExcecaoSCEV {
        try {
            Connection db = Conexao.getConnection();
            PreparedStatement st =
                    db.prepareStatement("delete from categoria where cod_categoria = ? ");
            st.setInt(1, Categoria.getCodigoCategoria());
            st.executeUpdate();
            st.close();
        } catch (SQLException ex) {
            throw new ExcecaoSCEV("Erro na alteração da Categoria.  Código "
                    + ex.getSQLState()
                    + "\nDescricao "
                    + ex.getMessage());
        }
    }
}
